import static org.junit.Assert.assertEquals;

import org.junit.Test;


public class Main {

	/**
	 * Metodo que me retorna si el anio es bisiesto o no.
	 * @return bisiesto, retorna true si el anio es bisiesto, de lo contrario retonra false.
	 */
	public static boolean bisiesto (Fecha fecha){
		return ((((fecha.getAnio() % 4)==0) && ((fecha.getAnio() / 100) != 0)) || (((fecha.getAnio() / 100)==0) && ((fecha.getAnio() / 400)==0)));
	}
	
	/**
	 * Metodo que retorna si la fecha actual es valida o no
	 * @return valida, retorna true si la fecha es valida, de lo contrario retorna false.
	 */
	public static boolean fechaValida(Fecha fecha){
		boolean valida = false;
		
		if (((fecha.getDia() < 1)||(fecha.getDia() > 31)) || ((fecha.getMes() < 1)||(fecha.getMes() > 12))){
	      valida = false;
		}
		else{
			if (((fecha.getMes()==4)||(fecha.getMes()==6)||(fecha.getMes()==9)||(fecha.getMes()==11)) && (fecha.getDia()<=30)){
	        valida=true;
			}
			else{
				if (((fecha.getMes()==1)||(fecha.getMes()==3)||(fecha.getMes()==5)||(fecha.getMes()==7)||(fecha.getMes()==8)||(fecha.getMes()==10)||(fecha.getMes()==12)) && (fecha.getDia()<=31)){
					valida= true;
				}
				else{
					if ((bisiesto (fecha)) && (fecha.getMes()==2) && (fecha.getDia()<=29)){
						valida= true;
					}
					else{
						if ((!(bisiesto (fecha))) && (fecha.getMes()==2) && (fecha.getDia()<=28)){
							valida = true;
						}
						else{
							valida = false;
						}
					}
				}
			}
		}
		return valida;
	}
	
	/**
	 * Metodo que incrementa un dia a la fecha.
	 */
	public static void diaSiguiente(Fecha fecha){
		if (((fecha.getMes()==1)||(fecha.getMes()==3)||(fecha.getMes()==5)||(fecha.getMes()==7)||(fecha.getMes()==8)||(fecha.getMes()==10)) && (fecha.getDia()==31)){
			fecha.setDia(1);
	      	fecha.setMes(fecha.getMes()+1);
		}
		else{
			if (((fecha.getMes()==1)||(fecha.getMes()==3)||(fecha.getMes()==5)||(fecha.getMes()==7)||(fecha.getMes()==8)||(fecha.getMes()==10)) && (fecha.getDia()<31)){
				fecha.setDia(fecha.getDia()+1);
			}
			else{
				if (((fecha.getMes()==4)||(fecha.getMes()==6)||(fecha.getMes()==9)||(fecha.getMes()==11)) && (fecha.getDia()==30)){
					fecha.setDia(1);
					fecha.setMes(fecha.getMes()+1);
				}
				else{
					if (((fecha.getMes()==4)||(fecha.getMes()==6)||(fecha.getMes()==9)||(fecha.getMes()==11)) && (fecha.getDia()<30)){
						fecha.setDia(fecha.getDia()+1);
					}
					else{
						if ((fecha.getMes()==2) && (fecha.getDia()==29)){
							fecha.setDia(1);
							fecha.setMes(fecha.getMes()+1);
						}
						else{
							if ((fecha.getMes()==2) && (fecha.getDia()<29)){
								if (!bisiesto(fecha)){
									if (fecha.getDia() == 28){
										fecha.setDia(1);
										fecha.setMes(fecha.getMes()+1);
									}
									else{
										fecha.setDia(fecha.getDia()+1);
									}
								}
								else{
									fecha.setDia(fecha.getDia()+1);
								}
							}
							else{
								if ((fecha.getMes()==12) && (fecha.getDia()==31)){
									fecha.setDia(1);
									fecha.setMes(1);
									fecha.setAnio(fecha.getAnio()+1);
								}
								else{
									if ((fecha.getMes()==12) && (fecha.getDia()<31)){
										fecha.setDia(fecha.getDia()+1);
									}
								}
							}
						}
					}
				}
			}
		}
	}
	/**
	 * Retorna la cantidad de horas que hay entre la fecha1 y la fecha 2
	 * @param fecha1
	 * @param hora1
	 * @param fecha2
	 * @param hora2
	 * @return
	 */
	
	public static Integer cantHorasEntreFechas(Fecha fecha1, Hora hora1, Fecha fecha2, Hora hora2){
		int contador = -1;
		while (!fecha1.equals(fecha2)){
			diaSiguiente(fecha1);
			contador++;
		}
		return (24-hora1.getHora()+contador*24+hora2.getHora());
	}
	 
	
	
	/**
     * Test of setDni method, of class FuncionesVerificables.
     */
    @Test
    public static Boolean testSetDni() {
        System.out.println("setDni");
        //FuncionesVerificables instance = new FuncionesVerificables();
        //instance.setDni(dni);
        String dni = "33.814.602";
        boolean test = true;
        if ((dni.charAt(0)>= 48 && dni.charAt(0)<= 57) && (dni.charAt(1)>= 48 && dni.charAt(1)<= 57)
        		&& (dni.charAt(2)== 46) && (dni.charAt(3)>= 48 && dni.charAt(3)<= 57)
        		&&(dni.charAt(4)>= 48 && dni.charAt(4)<= 57) && (dni.charAt(5)>= 48 && dni.charAt(5)<= 57)
        		&& (dni.charAt(6)== 46) && (dni.charAt(7)>= 48 && dni.charAt(7)<= 57)
        		&&(dni.charAt(8)>= 48 && dni.charAt(8)<= 57) && (dni.charAt(9)>= 48 && dni.charAt(9)<= 57)){
        		return (test);
        }
        else{
        	test = false;
        	return (test);
        }
        	
        }
       // assertEquals("PeDRO",nombre);
        //assertEquals(true,test);
        
        // TODO review the generated test code and remove the default call to fail.
        //fail("The test case is a prototype.");
    
        // TODO review the generated test code and remove the default call to fail.
   
    
    
    
    
    
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//Fecha fecha1 = new Fecha(28,02,2009);
		//Hora hora1 = new Hora(10,00);
		//Fecha fecha2 = new Fecha(01,03,2009);
		//Hora hora2 = new Hora(10,00);
		//System.out.println(bisiesto(fecha1));
		System.out.println(testSetDni());
		//diaSiguiente(fecha1);
		//System.out.println(fecha1.toString());
		//System.out.println(fecha1.toString());
		//System.out.println(fecha2.toString());
		//System.out.println(fecha1.equals(fecha2)+" son iguales las fechas..");
		//System.out.println(cantHorasEntreFechas(fecha1,hora1,fecha2,hora2)+" distancia de horas..");
	}

}
